// 引入node 的path
const path = require("path")
// 引入html插件
const htmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

// commjs的暴露
module.exports = {
  // 模式
  mode:"development",
  // mode:"production",
  // 入口文件
  entry:{
    app:'@/index.ts',
    // pritn:'@/print.js'
    // app:"@/index.js",
    // another:"@/anotherModule.js"

    //  ----  多入口
    // app:{
    //   import :'@/index.js',
    //   dependOn:"shared"
    // },
    // another:{
    //   import :"@/anotherModule.js",
    //   dependOn:"shared"
    // },
    // shared:'lodash'
  },
  //输出文件
  output:{
    // filename:"[name].bundle.js",
    // contenthash 会根据文件内容生成一个唯一的hash值  如果文件内容改变  name文件名一定是会改变的
    filename:"[name].[contenthash].bundle.js",
    path:path.resolve(__dirname,"dist"),
    target: ["web", "es5"]
    // environment: {
    //   arrowFunction: false, // 环境不支持箭头函数
    //   bigIntLiteral: false,  // 不支持BigInt
    //   const: true,
    //   destructuring: false,  // 不支持解构
    //   dynamicImport: false,  // 不支持异步import
    //   forOf: false,   // 不支持for...of
    //   module: false,  // 不支持module
    // }
    // publicPath:'/'
  },
  //挡在一个html中引入多个入口时需要添加
  optimization:{
    moduleIds:"deterministic",
    runtimeChunk:"single",  // 为所有的 chunk创建一个runtime bundle
    splitChunks:{
        cacheGroups:{
          vendor:{
            test:/[\\/]node_modules[\\/]/,
            name:"vendors",
            chunks:"all"
          }          
        }
    }
  },
    
    // splitChunks:{
    //   chunks:"all"
    // }
  module:{
    rules:[
      {
        test:/\.css$/,
        // 执行顺序是倒序
        use:['style-loader','css-loader']
      },
      //匹配图片
      {
        test:/\.(png|svg|jpg|gif)$/,
        use:['file-loader']
      },
      // 匹配文字
      {
        test:/\.(woff|woff2|eot|ttf|otf)$/,
        use:['file-loader']
      }
    ]
  },
  // 插件
  plugins:[
    new CleanWebpackPlugin(),
    new htmlWebpackPlugin({title:'person-project'}),
  ],
  //配置解析
  resolve:{
    alias:{
     "@": path.resolve(__dirname,"src")
    }
  },
  //  开发控制
  devtool:"inline-source-map",
  devServer:{
    static:'./dist',
    compress: true,
    port: 9000,
    hot:true
  }
}